home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d3 / et4.arc / ET4.BAS next >
BASIC Source File  |  1983-07-20  |  17KB  |  350 lines

  1. 100   ON ERROR GOTO 8020:DEFSTR A-D:DEFINT E-Z:DIM A(1000):DL=STRING$(79,205)
  2. 110   'Line 100 is a copy of line 4985 to satisfy the BASIC Compiler - T.Hall 7-20-83
  3. 120   '          D. MCCOY - 05/07/83
  4. 140   GOTO 4980
  5. 160   '-------------------- SUBROUTINES -----------------------
  6. 200   K$=INKEY$:IF K$="" THEN PRINT "      ";CHR$(221);BS;BS;BS;BS;BS;BS;BS;:GOTO 200
  7. 220   RETURN
  8. 230   K$=INKEY$:RETURN
  9. 240   '-------------------- INKEY$ AND CONVERT TO UPPER CASE----
  10. 260   PRINT " --> ";
  11. 280   K$=INKEY$:IF K$="" THEN 280
  12. 300   IF ASC(K$)>96 AND ASC(K$)<123 THEN K$=CHR$(ASC(K$)-32)
  13. 320   PRINT K$:RETURN
  14. 340   '-------------------- DISPLAY FULL LINE -----------------
  15. 360   PRINT USING B;NL;:PRINT A(NL):RETURN
  16. 380   '-------------------- DISPLAY INDENTED LINE ------------
  17. 400   LD=INT(LEN(A(NL))/73):FOR J=0 TO LD
  18. 420   IF J=0 THEN PRINT USING B4;NL,MID$(A(NL),1,72) ELSE PRINT USING B3;MID$(A(NL),J*72+1,72)
  19. 440   NEXT:RETURN
  20. 460   '------------------- EDIT SUBROUTINE --------------------
  21. 480   LA=LEN(A(NL)):PRINT "EDIT->";CHR$(221);
  22. 500   FOR I=1 TO LA
  23. 540     K1$=INKEY$:IF K1$="" THEN PRINT CHR$(95);BS;:GOTO 540
  24. 560     IF ASC(K1$)>96 AND ASC(K1$)<123 THEN K1$=CHR$(ASC(K1$)-32)
  25. 580     IF ASC(K1$)=8 AND I>1 THEN 1100        'BACKSPACE
  26. 600     IF ASC(K1$)=13 THEN 1560               'ENTER
  27. 620     IF K1$=" " THEN 1020     'space bar
  28. 640     IF K1$="I" THEN 1420     'insert mode
  29. 660     IF K1$="C" THEN 1240     'change char
  30. 680     IF K1$="D" THEN 1360     'delete char
  31. 700     IF K1$="X" THEN 1560     'list line & insert
  32. 720     IF K1$="H" THEN 1680     'hack & insert
  33. 740     IF K1$="S" THEN 1720     'search for char
  34. 760     IF K1$="Q" THEN 900      'abort changes & return
  35. 770     IF K1$="?" THEN 910      'abort changes, help & return
  36. 780     IF ASC(K1$)<48 OR ASC(K1$)>57 THEN 820     'number key
  37. 800     IF LEN(K5$)<3 THEN K5$=K5$+K1$:K5=VAL(K5$)
  38. 820     GOTO 540
  39. 840     K5$="":K5=0
  40. 860   NEXT I
  41. 880   A(NL)=AN
  42. 900   RETURN
  43. 908   '          HELP EDIT
  44. 910   PRINT:GOSUB 1924:AN="":GOSUB 400:GOTO 480
  45. 920   '          SET K5 PARAMETERS
  46. 940   IF K5>(LA-I+1) THEN K5=LA-I+1
  47. 960   IF K5<1 THEN K5=1
  48. 980   RETURN
  49. 1000   '          SPACEBAR
  50. 1020   GOSUB 940
  51. 1040   AN=AN+MID$(A(NL),I,K5):PRINT MID$(A(NL),I,K5);:I=I+K5-1
  52. 1060   FOR J=1 TO 80:NEXT J:GOTO 840
  53. 1080   '          BACKSPACE
  54. 1100   GOSUB 940:FOR J=1 TO K5
  55. 1160   IF LEN(AN)>0 THEN AN=LEFT$(AN,LEN(AN)-1)
  56. 1180   IF I>1 THEN I=I-1:PRINT BS;
  57. 1200   NEXT J:K5=0:K5$="":GOTO 540
  58. 1220   '           C EDIT
  59. 1240   GOSUB 940  :FOR J=1 TO K5
  60. 1260   K2$=INKEY$:IF K2$="" THEN PRINT CHR$(223);BS;:GOTO 1260
  61. 1280   AN=AN+K2$:PRINT K2$;:I=I+1
  62. 1300   NEXT J:I=I-1:K1$=""
  63. 1320   GOTO 840
  64. 1340   '          D EDIT
  65. 1360   GOSUB 940
  66. 1380   FOR J=1 TO K5:PRINT CHR$(219);:NEXT J:I=I+J-2:GOTO 840
  67. 1400   '          I EDIT
  68. 1420   K3$=INKEY$:IF K3$=""THEN PRINT CHR$(220);BS;:GOTO 1420
  69. 1440   IF ASC(K3$)=27 THEN I=I-1:GOTO 840
  70. 1460   IF ASC(K3$)=13 THEN 1560        'TO X EDIT
  71. 1480   IF ASC(K3$)= 8 THEN AN=LEFT$(AN,LEN(AN)-1):PRINT BS;:GOTO 1530
  72. 1500   AN=AN+K3$
  73. 1520   PRINT K3$;
  74. 1530   GOTO 1420
  75. 1540   '          X EDIT
  76. 1560   GOSUB 940
  77. 1562   IF I=1 THEN 1580
  78. 1564   IF I>LA THEN 1620
  79. 1566   IF I<1 THEN 1620
  80. 1568   IF I>255 THEN 1620
  81. 1580   K5=LA-I+1:IF K5<0 THEN 1620
  82. 1600   AM=MID$(A(NL),I,K5):AN=AN+AM:PRINT AM;:I=I+K5:K5=0:K5$=""
  83. 1620   IF ASC(K1$)=13 OR ASC(K3$)=13 THEN K1$=" ":K3$=" ":GOTO 880
  84. 1640   GOTO 1420
  85. 1660   '          H EDIT
  86. 1680   I=LA+1:GOTO 1420
  87. 1700   '          SEARCH FOR CHAR
  88. 1720   K4$=INKEY$:IF K4$="" THEN 1720
  89. 1740   K6=0:K7=I+1:GOSUB 940:FOR J=1 TO K5
  90. 1760   K6=INSTR(K7,A(NL),K4$)
  91. 1780   IF K6>0 THEN K7=K6+1
  92. 1800   NEXT J:K5=0:K5$=""
  93. 1820   IF K6<1 THEN K6=LA+1
  94. 1840   L3=K6-I:IF L3<0 THEN L3=0
  95. 1860   AM=MID$(A(NL),I,L3):AN=AN+AM:PRINT AM;:I=I+L3
  96. 1880   IF I<LA+1 THEN 540
  97. 1900   AN=AN+MID$(A(NL),I,1):PRINT MID$(A(NL),I,1);:GOTO 880
  98. 1920   '--------------------- HELP MENUS -----------------------
  99. 1922   '--------------------- EDIT MENU ------------------------
  100. 1924   PRINT DL:PRINT"    EDIT Subcommands:        nC=Change    n<Spacebar>=Copy Character(s)"
  101. 1926   PRINT"        H=Hack & Insert      nD=Delete    n(<--)=Backspace(s)"
  102. 1928   PRINT"        X=List & Insert      I=Insert     <Esc>=Insert OFF"
  103. 1929   PRINT"        Q=Quit No Changes    ?=Help       <Enter>=End Edit Save Changes"
  104. 1930   PRINT"        nSc=Search for Nth occurance of Character c"
  105. 1931   PRINT DL:RETURN
  106. 1932   PRINT B2;"EDIT:   n<C>  n<D>  <H>  <I>  <Q>  n<S>c  <X>  n< >  <Esc>  <?>":RETURN
  107. 1940   '--------------------- COMMANDS -------------------------
  108. 1960   PRINT DL
  109. 1980   PRINT"    Commands:       A=Add         F=Find      K=Memory      P=Print"
  110. 2000   PRINT"        R=Replace   S=Save        X=eXit      &=Merge       ?=Help"
  111. 2020   PRINT"        Cn=Copy n   Dn=Delete n   En=Edit n   In=Insert n   Ln=List n"
  112. 2040   PRINT DL:RETURN
  113. 2060   '-------------------- LIST SUBCOMMANDS ------------------
  114. 2100   PRINT DL:PRINT "    LIST Subcommands:"TAB(39)"/=Commands                 X=eXit"
  115. 2120   PRINT"<Up Arrow>=Scroll backward    <Left Arrow>=First line   ?=Help       <PgUp>"
  116. 2140   PRINT"<Down Arrow>=Scroll forward   <Right Arrow>=Last line   <Home>=CLS   <PgDn>"
  117. 2155   PRINT DL:RETURN
  118. 2160   '--------------------- MESSAGE DELAY -------------------
  119. 2180   FOR J=1 TO 1000:NEXT:RETURN
  120. 2200   '---------------------- COMMAND LINE PROCESSOR ---------
  121. 2240   GOSUB 1960       'HELP MENUS
  122. 2260   IF NL>LN THEN NL=LN
  123. 2270   PRINT B2;"Lines are numbered 1 to";LN;TAB(43)"Current line #";NL
  124. 2280   PRINT B2;"(A,F,K,P,R,S,X,&,? or Cn,Dn,En,In,Ln)  Command : ";
  125. 2300   LINE INPUT K3$:IF K3$="" OR LEN(K3$)>4 THEN 2260
  126. 2320   K$=LEFT$(K3$,1):IF ASC(K$)>96 AND ASC(K$)<123 THEN K$=CHR$(ASC(K$)-32)
  127. 2340   NM=NL:NL=VAL(MID$(K3$,2,3)):IF NL=0 THEN NL=NM
  128. 2360   IF LN<1 AND K3$<>"X" AND K3$<>"?" THEN 2920
  129. 2380   IF NL>LN THEN NL=LN
  130. 2400   KM$=K$:KN=INSTR("ACDEFKILPRSX&?",K$)
  131. 2420   ON KN GOTO 2920 ,4420 ,4560 ,4700 ,3080 ,7000,4760 ,2480 ,5500  ,3220 ,5780  ,5920  ,5240
  132. 2440   GOTO 2240
  133. 2460   '-------------------- LIST -----------------------------
  134. 2480   PRINT B2;"LIST: Arrw keys  /=Commnds  X=eXit  ?=Help  <Home>=CLS  <PgUp>  <PgDn>"
  135. 2500   GOSUB 400
  136. 2520   GOSUB 200
  137. 2560   IF K$="?" THEN GOSUB 2100 :GOSUB 400   '? HELP
  138. 2580   IF G3=128 AND G4=2 THEN GOSUB 2100 :GOSUB 400   '? HELP/R
  139. 2600   IF K$="X" OR K$="x" THEN GOSUB 230:GOTO 2240     'X EXIT
  140. 2620   IF K$="/" THEN GOSUB 230:GOTO 2260     '/ EXIT
  141. 2630   IF LEN(K$)=2 THEN K=ASC(RIGHT$(K$,1)) ELSE K=0
  142. 2640   IF K=71 THEN CLS:GOTO 2480
  143. 2660   IF K<>80 THEN 2680
  144. 2670   IF NL<LN THEN NL=NL+1:GOSUB 400 ELSE GOSUB 2100:NL=1:GOSUB 400
  145. 2680   IF K<>72 THEN 2700
  146. 2690   IF NL>1 THEN NL=NL-1:GOSUB 400 ELSE GOSUB 2100:NL=LN:GOSUB 400
  147. 2700   IF K=75 THEN NL=1:GOTO 2500
  148. 2720   IF K=77 THEN NL=LN:GOTO 2500
  149. 2730   IF K<>81 THEN 2790
  150. 2735   IF NL<LN THEN LO=NL+1
  151. 2740   HI=LO+19:IF HI>LN THEN HI=LN
  152. 2750   FOR NL=LO TO HI-1
  153. 2770     GOSUB 400
  154. 2780   NEXT NL:GOSUB 400
  155. 2790   IF K<>73 THEN 2880
  156. 2795   IF NL>1 THEN HI=NL-1
  157. 2800   LO=NL-19:IF LO<2 THEN LO=2
  158. 2810   FOR NL=HI TO LO STEP-1
  159. 2830     GOSUB 400
  160. 2840   NEXT NL:GOSUB 400
  161. 2880   GOTO 2520
  162. 2900   '---------------------- ADD NEW LINES ------------------
  163. 2920   IF LN>1 THEN NL=LN-1:GOSUB 400
  164. 2940   IF LN>0 THEN NL=LN:GOSUB 400 ELSE CLS:PRINT "To create a new file:"
  165. 2960   PRINT B2;"ADD new lines below (Blank Line to END)"
  166. 2980   IF LN>998 THEN PRINT B2;"*** LINES FULL ***":GOTO 2260
  167. 3000   LN=LN+1:PRINT USING B;LN;
  168. 3020   LINE INPUT A(LN):IF A(LN)="" THEN LN=LN-1:NL=LN:GOTO 2260
  169. 3040   GOTO 2980
  170. 3060   '-------------------- FIND/SEARCH ----------------------
  171. 3080   PRINT B2;:LINE INPUT"Enter search string to FIND : ";S2$:IK=0
  172. 3100   FOR NL=1 TO LN
  173. 3120     IJ=INSTR(A(NL),S2$)
  174. 3140     IF IJ>0 THEN GOSUB 400  :IK=IK+1
  175. 3160     IF IK=5 THEN IK=0:PRINT B2;"X=eXit.    Any key to continue ";:GOSUB 260  :IK=0:IF K$="X" THEN 2260
  176. 3180   NEXT:GOTO 2260
  177. 3200   '-------------------- REPLACE CHAR/STRING --------------
  178. 3220   PRINT DL:PRINT"REPLACE: A=ASCII Code #   S=String   V=View Current Line #";NL
  179. 3240   PRINT"         C=Convert UC to LC if in quotes          X=eXit":PRINT DL
  180. 3260   PRINT B2;"Selection";:GOSUB 260
  181. 3280   IF K$="S" THEN 3760
  182. 3300   IF K$="C" THEN 4140
  183. 3310   IF K$="V" THEN 4382
  184. 3320   IF K$<>"A" THEN 2260
  185. 3340   KN$=K$:CLS:FOR J=32 TO 255:PRINT USING "### = ! ";J,CHR$(J);:NEXT:PRINT
  186. 3360   INPUT"Enter ASCII code number to be REPLACED (0-255): ";S2
  187. 3380   IF S2<0 OR S2>255 THEN CLS:GOTO 2240
  188. 3400   INPUT "Enter ASCII code number of replacement character (0-255): ";S3
  189. 3420   IF S3<0 OR S3>255 THEN CLS:GOTO 2240
  190. 3440   S3$=CHR$(S3):S2$=CHR$(S2)
  191. 3460   PRINT"Prompt for each change (Y/N)? ";:GOSUB 260
  192. 3480   KM$=K$:IF KM$<>"Y" THEN KM$="N"
  193. 3500   CLS:FOR NL=1 TO LN:JJ=1
  194. 3520     IF LEN(A(NL))<1 THEN 3700
  195. 3540     IJ=INSTR(JJ,A(NL),S2$):JJ=IJ+1
  196. 3560     IF IJ<1 THEN 3700
  197. 3580     IF KM$="N" THEN 3680    'no prompting
  198. 3600     GOSUB 360  :PRINT TAB(IJ+7);CHR$(94)
  199. 3620     PRINT "Replace (Y/N or X=eXit) ? ";:GOSUB 260:CLS
  200. 3640     IF K$="X" THEN 3720
  201. 3660     IF K$<>"Y" THEN IF IJ<LEN(A(NL)) THEN 3540 ELSE 3700
  202. 3680     MID$(A(NL),IJ)=S3$
  203. 3685     IF KM$="N" THEN GOSUB 360
  204. 3688     GOTO 3540
  205. 3700   NEXT
  206. 3720   GOTO 2240
  207. 3740   '         REPLACE STRING
  208. 3760   PRINT B2;:LINE INPUT "Enter string to be REPLACED : ";B1:IF B1="" THEN 3760
  209. 3780   PRINT B2;:LINE INPUT "Enter new text of replacement string : ";C1$
  210. 3800   PRINT B2;"Prompt for each change (Y/N)?";:GOSUB 260
  211. 3820   IF K$="Y" THEN KM$="Y" ELSE KM$="N"
  212. 3840   CLS:P=0:FOR NL=1 TO LN
  213. 3860     P=INSTR(P+1,A(NL),B1) : IF P<1 THEN 4100
  214. 3880     IF KM$="N" THEN 3980
  215. 3900     GOSUB 360
  216. 3920     PRINT TAB(P+7) CHR$(94)
  217. 3940     PRINT "Replace (Y/N/X)?";:GOSUB 260:CLS:IF K$="X" THEN 2240
  218. 3960     IF K$<>"Y" THEN P=P+LEN(B1)-1:GOTO 3860
  219. 3980     A1$=LEFT$(A(NL),P-1)
  220. 4000     L1=LEN(A(NL))-LEN(A1$)-LEN(B1)
  221. 4020     A2$=RIGHT$(A(NL),L1)
  222. 4040     A(NL)=A1$+C1$+A2$
  223. 4060     IF KM$="N" THEN GOSUB 360
  224. 4080     GOTO 3860
  225. 4100   NEXT:GOTO 2240
  226. 4120   '-------------------- U/C TO L/C -----------------------
  227. 4140   CLS:FOR NL=1 TO LN:P=1
  228. 4160   IJ=INSTR(P,A(NL),CHR$(34)):IF IJ<1 THEN 4360
  229. 4180   IK=INSTR(IJ+1,A(NL),CHR$(34)):IF IK<1 THEN IK=LEN(A(NL))
  230. 4200   FOR I=IJ+2 TO IK
  231. 4220    X$=MID$(A(NL),I,1):IF X$="" THEN 4320
  232. 4240    Y$=MID$(A(NL),I-1,1):IF Y$="=" OR Y$=" "THEN 4320
  233. 4260    IF ASC(X$)<65 OR ASC(X$)>90 THEN 4320
  234. 4280    X$=CHR$(ASC(X$)+32)
  235. 4300    MID$(A(NL),I,1)=X$
  236. 4320   NEXT I:GOSUB 400
  237. 4340   P=I:GOTO 4160
  238. 4344   X$=MID$(A(NL),I,1):PRINT USING "! = ### ";X$,ASC(X$);
  239. 4360   NEXT NL
  240. 4380   GOTO 2240
  241. 4381   '-------------------- VERYIFY ASCII CODES -------------
  242. 4382   CLS:NA=LEN(A(NL)):IF NA<1 THEN 4398 ELSE N2=NA/20
  243. 4383   FOR J=0 TO N2:N3=J*20+1:N4=N3+19
  244. 4384   FOR I=N3 TO N4
  245. 4386   IF I<=NA THEN PRINT USING " !  ";MID$(A(NL),I,1);
  246. 4388   NEXT I:IF I=>NA THEN PRINT
  247. 4390   FOR I=N3 TO N4
  248. 4392   IF I<=NA THEN PRINT USING "### ";ASC(MID$(A(NL),I,1));
  249. 4394   NEXT I:IF I=>NA THEN PRINT
  250. 4395   IF (J+1)/4-INT((J+1)/4)=0 AND I<NA THEN PRINT"Press any key to continue";:GOSUB 260
  251. 4396   NEXT J:PRINT
  252. 4398   GOTO 2240
  253. 4400   '--------------------- COPY LINE -----------------------
  254. 4420   NI$="":GOSUB 400  :PRINT B2;:PRINT"COPY  (X=Exit)  Line # to INSERT AFTER:";LC+1;:INPUT NI$
  255. 4440   NI=VAL(NI$):IF NI$="X" OR NI$="x" OR NI<0 OR NI>LN THEN 2260  ELSE A(0)=A(NL)
  256. 4445   IF NI=0 THEN NI=LC+1
  257. 4460   LC=NI:IF LC>998 THEN PRINT B2;"*** LINES FULL ***":GOTO 2260
  258. 4480   PRINT B2;"Working...*** Any Higher Line # Increased by 1 ***"
  259. 4500   FOR J=LN TO LC+1 STEP -1:A(J+1)=A(J):NEXT J:LN=LN+1:A(LC+1)=A(0)
  260. 4520   IF LC+1>NL THEN NL=NL+1:IF NL>LN THEN NL=LN
  261. 4522   IF LC+1<NL THEN NL=NL+2:IF NL>LN THEN NL=LN
  262. 4525   NM=NL:NL=LC+1:GOSUB 400:NL=NM
  263. 4530   GOTO 2260
  264. 4540   '--------------------- DELETE --------------------------
  265. 4560   GOSUB 400  :PRINT B2;"DELETE...Are you sure (Y/N)? ";:GOSUB 260
  266. 4580   IF K$<>"Y" THEN NL=NL+1:GOTO 2260
  267. 4600   IF NL>999 THEN PRINT B2;"*** UNABLE TO DELETE ***":GOTO 2260
  268. 4620   PRINT B2;"Working...*** Any Higher Line # Decreased by 1 ***"
  269. 4640   FOR J=NL TO LN-1:A(J)=A(J+1):NEXT:LN=LN-1:IF NL>LN THEN NL=LN
  270. 4660   GOSUB 400:GOTO 2260
  271. 4680   '---------------------- EDIT ---------------------------
  272. 4700   GOSUB 1932:GOSUB 400  :AN="":GOSUB 480  :AN="":PRINT:GOSUB 400:NL=NL+1:GOTO 2260
  273. 4740   '-------------------- INSERT ---------------------------
  274. 4760   IF NL>0 THEN GOSUB 400
  275. 4780   PRINT USING B;NL+1;:LINE INPUT A(0)
  276. 4800   IF LN>998 THEN PRINT B2;"*** LINES FULL ***":GOTO 2260
  277. 4820   PRINT B2;"Working...*** Any Higher Line # Increased by 1 ***"
  278. 4840   FOR J=LN TO NL+1 STEP-1:A(J+1)=A(J):NEXT:LN=LN+1:A(NL+1)=A(0)
  279. 4860   NL=NL+1:IF NL>LN THEN NL=1
  280. 4880   GOSUB 400:GOTO 2260
  281. 4900   '-------------------------------------------------------
  282. 4920   ' D. MCCOY 03/25/83
  283. 4960   '-------------------- INITIALIZE -----------------------
  284. 4980   CLS:PRINT TAB(11)"ET - Edit Text - IBM PC File Editor"
  285. 4985   'ON ERROR GOTO 8020:DEFSTR A-D:DEFINT E-Z:DIM A(999+1):DL=STRING$(79,205
  286. 5000   PRINT TAB(11)"Vers. 3.4     D. McCoy      70040,1131":PRINT DL
  287. 5020   PRINT"      This program is designed to edit ASCII text files."
  288. 5040   PRINT"      BASIC programs must be saved in the ,A ASCII"
  289. 5060   PRINT"      format for editing."
  290. 5070   PRINT DL
  291. 5120   B=CHR$(91)+"###"+CHR$(93)+CHR$(32)+CHR$(221)
  292. 5130   B2="      "+CHR$(221)+CHR$(219)+" "
  293. 5140   B3="      "+CHR$(221)+"\                                                                      \"
  294. 5160   B4=B+"\                                                                      \"
  295. 5180   BS=CHR$(29)+CHR$(32)+CHR$(29)
  296. 5200   '---------------------- LOAD TEXT FILE -----------------
  297. 5240   IF K$="&" THEN PRINT B2;"To MERGE another file -"
  298. 5260   PRINT B2;"Enter the filespec of the file to be LOADED "
  299. 5280   IF KM$="&" THEN PRINT B2;"? = Dir or X to eXit : ";:ELSE PRINT B2;"? = Dir or <Enter> to create a NEW file : ";
  300. 5300   LINE INPUT FS$: IF FS$<>"?" THEN 5320
  301. 5310   IF FS$="?" THEN PRINT B2;"Which drive (A/B)";:GOSUB 260
  302. 5315   IF K$="A" THEN PRINT DL:FILES "A:*.*":PRINT DL:GOTO 5260
  303. 5318   IF K$="B" THEN PRINT DL:FILES "B:*.*":PRINT DL:GOTO 5260
  304. 5320   IF FS$="" AND KM$<>"&" THEN 2920
  305. 5340   IF FS$="" OR FS$="X" OR FS$="x" THEN FS$="":GOTO 5440
  306. 5360   OPEN "I",1,FS$
  307. 5380   IF EOF(1) THEN CLOSE:GOTO 5440
  308. 5400   LN=LN+1:IF LN>999 THEN LN=LN-1:CLOSE:GOTO 5440
  309. 5420   LINE INPUT #1,A(LN):LOCATE 6,40:PRINT"Index Line #";LN;:GOTO 5380
  310. 5440   NL=1:CLS:GOTO 2240
  311. 5480   '--------------------- PRINT ---------------------------
  312. 5500   PRINT B2;"Ready printer...":PRINT B2;"X=eXit.  PRINT index line numbers (Y/N)?";:GOSUB 260
  313. 5520   IF K$="X" THEN 2260  ELSE IF K$<>"Y" AND K$<>"N" THEN 5500
  314. 5540   LO=1:PRINT B2;"Enter LOWEST  line # to print ( 1 to";LN;")";:INPUT LO
  315. 5560   IF LO<1 THEN LO=1
  316. 5565   IF LO>LN THEN LO=LN
  317. 5580   HI=LN:PRINT B2;"Enter HIGHEST line # to print (";LO;"to";LN;")";:INPUT HI
  318. 5600   IF HI>LN THEN HI=LN
  319. 5610   IF HI<1 THEN HI=LN
  320. 5615   IF HI<LO THEN HI=LO
  321. 5620   C="<###>  ":PRINT B2;"Printing index lines"LO"to"HI"..."
  322. 5640   LPRINT "       "; FS$;TAB(40)LEFT$(TIME$,8):LPRINT
  323. 5660   FOR J=LO TO HI
  324. 5680     IF K$="Y" THEN LPRINT USING C;J; ELSE LPRINT "       ";
  325. 5700     LPRINT A(J)
  326. 5720   NEXT
  327. 5740   FOR J=1 TO 6 : LPRINT : NEXT:GOTO 2260
  328. 5760   '--------------------- SAVE TEXT FILE ------------------
  329. 5780   PRINT B2;"Current filespec is: ";FS$
  330. 5800   PRINT B2;:LINE INPUT "X=eXit.  New Filespec to SAVE or <Enter>: ";F2$
  331. 5820   IF F2$="X" OR F2$="x" THEN 2260
  332. 5840   IF F2$<>"" THEN FS$=F2$
  333. 5860   OPEN "O",1,FS$
  334. 5880   FOR J=1 TO LN:PRINT#1,A(J):NEXT:CLOSE:GOTO 2260
  335. 5900   '-------------------- END ------------------------------
  336. 5920   PRINT B2; "EXIT...Was text file saved (Y/N)?";:GOSUB 260
  337. 5940   IF K$="Y" THEN 5960   ELSE 2260
  338. 5960   PRINT B2;"Run again (Y/N)?";:GOSUB 260
  339. 5980   IF K$="N" THEN CLEAR 50:END
  340. 6000   RUN
  341. 6980   '-------------------- MEMORY --------------------------
  342. 7000   PRINT B2;"Bytes free space =";FRE(X)
  343. 7060   GOTO 2260
  344. 8000   '-------------------- ERROR TRAP ------------------------
  345. 8020   IF  ERR=53 THEN PRINT B2;"*** File not found ***":GOSUB 2180 :IF ERL=5360  THEN RESUME 5240  ELSE RESUME 5800
  346. 8040   IF  ERR=64 THEN PRINT B2; "*** Bad file name ***" :GOSUB 2180 :IF ERL=5360  THEN RESUME 5240  ELSE RESUME 5800
  347. 8060   IF  ERR=15 AND ERL=1500 THEN PRINT B2;"*** Line too long ***":GOSUB 2180 :RESUME 880
  348. 8080   CLOSE:PRINT B2;"*** Error"; ERR;"in line"ERL" ***":GOSUB 1960 :GOTO 2260
  349. 8100   '-------------------- END ------------------------------
  350.